# -*- coding: utf-8 -*-

'''eof
name:月均订烟次数（LT）
code:AvgTradeCnt_LT
tableName:
columnName:
groups:烟商
dependencies:BTM
type:常用指标
datasourceType:在线指标
description:
eof'''

'''
1. 分子 = Select count (indentNum) as 最近12个月订烟总次数  from 订单数组 
where indentMoney ≠ null and month(当前日期 - indentDate)≤12；
2. 分母 = （申请日期 - 最小订单日期）/30
3.指标值 = 分子/分母
'''

import sys
import pandas as pd
import datetime
import re

reload(sys)
sys.setdefaultencoding('utf-8')


def AvgTradeCnt_LT():
    null_type_list = ['', None, 'null', 'Null', '/', ' ']
    indent_date = []
    indent_num = []
    try:
        BTM_ = BTM['data']
        if Formate(BTM_.get('bbd_dotime')) is not None:
            ApplTime = datetime.datetime.strptime(Formate(BTM_['bbd_dotime']), '%Y%m%d')
        else:
            ApplTime = datetime.datetime.now()
        last_year_months_list = [(ApplTime - pd.tseries.offsets.DateOffset(days=i * 30)).strftime('%Y%m%d') for i in [12, 0]]
    except:
        return u'缺失值'

    try:
        if BTM_.has_key('indent') and BTM_['indent'] not in null_type_list \
            and len(BTM_['indent']) >= 1:
            for i in BTM_['indent'] :
                if i.has_key('indentDate') and i['indentDate'] not in null_type_list \
                        and i.has_key('indentMoney') and i['indentMoney'] not in null_type_list \
                        and isfloat(i['indentMoney']) \
                        and Formate(i['indentDate']) is not None \
                        and i.has_key('indentNum') and i['indentNum'] not in null_type_list \
                        and Formate(i['indentDate']) > last_year_months_list[0] \
                        and Formate(i['indentDate']) <= last_year_months_list[1]:
                    #用订单编号统计个数
                    indent_num.append(i['indentNum'])
                    try:
                        tmp = datetime.datetime.strptime(Formate(i['indentDate']),'%Y%m%d')
                        indent_date.append(tmp)
                    except:
                        continue
            if len(indent_date) >= 1:
                month_num = ((ApplTime - min(indent_date)).days + 1)/float(30)
                if month_num != 0:
                    return round(float(len(indent_num))/float(month_num), 4)
                else:
                    return u'缺失值'
            else:
                return u'缺失值'
        else:
            return u'缺失值'
    except:
        return u'缺失值'

def isfloat(x):
    try:
        if isinstance(float(x), float) and float(x)>=0:
            return True
        else:
            return False
    except:
        return False


#统一时间格式为'20180528'-> '%Y%m%d'
def Formate(time):
    import re
    import datetime
    r = re.compile(r'\D+')
    try:
        date = datetime.datetime.strptime(time, '%Y.%m.%d').strftime('%Y%m%d')
    except:
        try:
            date = datetime.datetime.strptime(time, '%Y-%m-%d').strftime('%Y%m%d')
        except:
            try:
                date = datetime.datetime.strptime(time, '%Y/%m/%d').strftime('%Y%m%d')
            except:
                try:
                    tmp = r.sub('', time)
                    date = datetime.datetime.strptime(tmp, '%Y%m%d').strftime('%Y%m%d')
                except:
                    date = None
    return date


result = AvgTradeCnt_LT()
